CREATE PROCEDURE [dbo].[Sp_HIXPrescription] @FieldName VARCHAR(10),  @AzTarikh SMALLDATETIME , @TaTarikh SMALLDATETIME , @Type CHAR(1) AS 
DECLARE @SqlCommmand NVARCHAR(Max)
DECLARE @Parameter NVARCHAR(100)

SET @SqlCommmand = 'Select HIXPrescription.Itemid, HIXPrescription.Nu_Forosh , Sazman_Code, Resive_Name, StatusDrug, InsertDate, InsertTime, ResultDate,ResultTime, Resultprescription,Messprescription,Id From(
                    SELECT dbo.HIX_Prescriptions.Itemid, dbo.DrugH.Nu_Forosh ,Sazman_Code, 
                    dbo.DrugH.Resive_Name ,
                    CASE WHEN Status = 0 THEN '' ''
                      WHEN Status = 1 THEN '' ''
                      WHEN Status = 2 THEN '' ''
                      WHEN Status = 3 THEN ''  ''
                    END AS StatusDrug ,
                    dbo.MiladiToShamsi(dbo.HIX_Prescriptions.InsertDate) InsertDate  ,
                    Convert(Varchar(10), dbo.HIX_Prescriptions.InsertDate,108)  InsertTime  ,
                    dbo.MiladiToShamsi(dbo.HIX_Prescriptions.ResultDate) ResultDate,
                    Convert(Varchar(10), dbo.HIX_Prescriptions.ResultDate,108)  ResultTime  ,
                    CASE 
                      WHEN Type = 1 THEN ''''
                      WHEN Type = 2 THEN ''''
                    END AS Resultprescription ,
                    CASE 
                      WHEN ExceptionCode = ''ix.sender.not.corresponding.dispatcher''  THEN ''         ''
                      WHEN ExceptionCode = ''ix.required.fields.not.found''            THEN ''        ''
                      WHEN ExceptionCode = ''ix.agreement.not.found''    THEN ''                ''
                      WHEN ExceptionCode = ''ix.micro.server.unreachable'' THEN ''        .  ''
                      WHEN ExceptionCode = ''ix.security.pass.gen.invalid'' THEN ''ј  PlainId,encryptedId,SenderId  ''
                      WHEN ExceptionCode = ''ix.agreement.time.violated''   THEN ''     ''
                      WHEN ExceptionCode = ''ix.agreement.max.request.violated'' THEN ''        ''
                      WHEN ExceptionCode = ''ix.agreement.temporary.deactivate'' THEN ''          ''
                      WHEN ExceptionCode = ''ix.timeout.occurred'' THEN ''    ''
                      WHEN ExceptionCode = ''ix.receiverId.xor.receiverIds'' THEN ''                ''
                      WHEN ExceptionCode = ''ix.this.action.only.one.receiverId'' THEN ''            ''
                      WHEN ExceptionCode = ''ix.no.path.found.for.action'' THEN ''       ''
                      WHEN ExceptionCode = ''ix.action.type.not.found'' THEN ''    ''
                      WHEN ExceptionCode = ''ix.max.receiverIds.violated'' THEN '' ϐ     ''
                      WHEN ExceptionCode = ''ix.invalid.timeout'' THEN ''       ''
                      WHEN ExceptionCode = ''ix.canonical.message.sender.id.null'' THEN ''      ''
                      WHEN ExceptionCode = ''ix.canonical.message.receiver.id.null'' THEN ''      ''
                      WHEN ExceptionCode = ''ix.canonical.message.service.null'' THEN ''     ''
                      WHEN ExceptionCode = ''ix.canonical.message.action.null''  THEN ''     ''
                      WHEN ExceptionCode = ''ix.canonical.message.version.null'' THEN ''      ''
                      WHEN ExceptionCode = ''ix.canonical.message.plainId.null'' THEN '' Ԙ    ''
                      WHEN ExceptionCode = ''ix.canonical.message.encryptedId''  THEN ''     ''
                      WHEN ExceptionCode = ''ix.route.path.not.found'' THEN ''      ''
                      WHEN ExceptionCode = ''ix.endpoint.could.not.process.request'' THEN ''       ''
                      WHEN ExceptionCode = ''ix.could.not.cast.sent.message''  THEN ''    PayloadClass''
                      WHEN ExceptionCode = ''ix.allowed.time.gap.violated'' THEN ''        3   ''
                      WHEN ExceptionCode = ''prescription.admissionInfo.admissionDate.is.invalid'' THEN ''     ''
                      WHEN ExceptionCode = ''prescription.patientInfo.patientId.is.invalid'' THEN ''    .'' 
                      ELSE ExceptionMessage
                    END AS Messprescription ,
        dbo.HIX_Prescriptions.Id
        FROM dbo.DrugH
        INNER JOIN dbo.HIX_Prescriptions ON dbo.HIX_Prescriptions.PrescriptionId = dbo.DrugH.Id_Havaleh
        Where CONVERT(Varchar(10),  ' + @FieldName + ', 111)  >= @StartDate 
        AND  CONVERT(Varchar(10),  '  + @FieldName + ', 111)  <= @EndDate) As HIXPrescription' 
        
IF @Type = '1'
  SET @SqlCommmand = @SqlCommmand + 
                    ' INNER JOIN ( 
                                   SELECT Nu_Forosh, MAX(ItemId) ItemId FROM dbo.HIX_Prescriptions INNER JOIN dbo.DrugH 
                                   ON dbo.HIX_Prescriptions.PrescriptionId = DrugH.Id_Havaleh  
                                   Where CONVERT(Varchar(10),  ' + @FieldName + ', 111)  >= @StartDate 
                                   AND  CONVERT(Varchar(10),  ' + @FieldName + ', 111)  <= @EndDate
                                   GROUP BY Nu_Forosh 
                                 ) AS T ON T.Nu_Forosh = HIXPrescription.Nu_Forosh AND T.ItemId = HIXPrescription.ItemId'
ELSE IF @type = '2' 
SET @SqlCommmand = ' UPDATE dbo.HIX_Prescriptions SET Type = 0 , Status = 0, InsertDate = GetDate(), ExceptionCode = Null,
                     ExceptionMessage = Null , ExceptionStacktrace = Null, PayloadClass = Null, ConversationId = NULL
                     WHERE ItemId IN(
                                     SELECT HIXPrescription.Itemid 
                                     FROM(
                                           SELECT  dbo.HIX_Prescriptions.Itemid, dbo.DrugH.Nu_Forosh
                                           FROM dbo.DrugH
                                           INNER JOIN dbo.HIX_Prescriptions ON dbo.HIX_Prescriptions.PrescriptionId = dbo.DrugH.Id_Havaleh
                                           Where CONVERT(Varchar(10),  ' + @FieldName + ', 111)  >= @StartDate 
                                           AND  CONVERT(Varchar(10),  '  + @FieldName + ', 111)  <= @EndDate
                                           And Type= 2 AND Status = 2 
                                          ) As HIXPrescription
                                          INNER JOIN ( 
				                                        SELECT Nu_Forosh, MAX(ItemId) ItemId FROM dbo.HIX_Prescriptions INNER JOIN dbo.DrugH 
					                                    ON dbo.HIX_Prescriptions.PrescriptionId = DrugH.Id_Havaleh WHERE Type= 2 AND Status = 2 
														AND  CONVERT(Varchar(10),  ' + @FieldName + ', 111)  >= @StartDate 
														AND  CONVERT(Varchar(10),  ' + @FieldName + ', 111)  <= @EndDate
														GROUP BY Nu_Forosh 
													  ) AS T 
													  ON T.Nu_Forosh = HIXPrescription.Nu_Forosh AND T.ItemId = HIXPrescription.ItemId
                                          )
                       Update HIX_Prescriptions Set Status = 3 
                       Where CONVERT(Varchar(10),  ' + @FieldName + ', 111)  >= @StartDate 
                       AND  CONVERT(Varchar(10),  '  + @FieldName + ', 111)  <= @EndDate
                       And Status =  2 '
SET @Parameter = N'@StartDate SMALLDATETIME, @EndDate SMALLDATETIME'
Exec Sp_ExecuteSql  @SqlCommmand, @Parameter, @StartDate = @AzTarikh, @EndDate = @TaTarikh
